// babel 只会对新的语法进行编译转换,不会对新的api(例如: Array.includes)进行转换
// 如果确实需要对api进行编译转换,需要使用到polyfill

module.exports = function(api){
	api.cache(true);

	const presets = [
		["@babel/preset-env", {
			"targets": {
				"browsers": ["ie >= 9", "last 20 versions"]
			},
			"corejs": "3", // 使用 useBuiltIns 必须加上这个版本, 2 或者 3
			"useBuiltIns": "usage" // 按需加载polyfill
		}]
	];  
	// 预设的运行是从后往前的
	// 代码中如果用到了还没有成为标准的语法,需要安装对应的预设,例如 @babel/preset-es2020

	// 插件在预设前运行
	const plugins = [
		"@babel/plugin-transform-runtime"
		// babel 在编译过程中会使用一些辅助函数,
		// 这些辅助函数被注入到每一个转换后的文件中,
		// 无法做到复用,
		// 这个插件将辅助函数抽取出来做到复用
	];  

	return {
		presets,
		plugins
	}
}
